package com.smartleanx.module.hrm.service.esign.task;


import cn.hutool.json.JSONObject;
import com.google.gson.JsonObject;
import com.smartleanx.framework.common.pojo.PageResult;
import com.smartleanx.module.hrm.service.esign.temp.param.ComponentBathParam;
import com.smartleanx.module.hrm.service.esign.temp.param.HrmEContractTaskParam;
import com.smartleanx.module.hrm.service.esign.temp.param.HrmEContractTempFileParam;
import com.smartleanx.module.hrm.service.esign.temp.param.HrmEContractTempParam;
import com.smartleanx.module.hrm.service.esign.temp.po.HrmEContractTask;
import com.smartleanx.module.hrm.service.esign.temp.po.HrmEFolder;
import com.smartleanx.module.hrm.service.esign.temp.po.HrmETaskComponents;
import com.smartleanx.module.hrm.service.esign.temp.result.*;
import com.smartleanx.module.hrm.service.esign.temp.vo.FillInLinkVo;
import com.smartleanx.module.hrm.service.esign.temp.vo.FillInViewPDFLinkVo;
import com.smartleanx.module.hrm.service.esign.temp.vo.HrmEContractTempVo;
import com.smartleanx.module.hrm.service.esign.temp.vo.SignFlowParamVo;
import com.smartleanx.module.hrm.util.esign.EsignHttpResponse;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface ESignTaskService {

    //创建签署任务
    Long createSignFlow(SignFlowParamVo signFlowParamVo);
    //获取填写控件  fillInType  等于  actorType
    ComponentResult getFillInComponents(Long taskId, String fillInType);
    //转pdf 做文件预览
    String getFillInViewToPDF(HashMap<String,Object> map);
    //预览详情
    String getFillInViewDetail(Long taskId);

    //提交填写  saveType 1/暂存 2/保存
    void saveFillInData(FillInViewPDFLinkVo fillInViewPDFLinkVo,String contractName,String contractCode);
    //发起签署
    void createTaskSignFlowByTaskId(Long taskId);
    //发起签署
    void createTaskSignFlow(HrmEContractTask hrmEContractTask);
    //发起签署
    void createTaskSignFlowByBpmProcessId(String bpmProcessId,Integer bpmStatus,String message);
    //批量提交填写  saveType 1/暂存 2/保存
    void saveFillInDataBath(ComponentBathResult param);
    //获取转pdf 文件id
    String getFillInToPDFId(Long taskId, List<HrmETaskComponents> componentList);
    //获取任务列表
    PageResult<HrmETaskListResult> getTaskPage(HrmEContractTaskParam param);
    //查询HTML填写后文件 需要通过 getFillInToPDFId 拿到文件id 在调用
    EsignHttpResponse getHTMLDetail(String fileId);
    //获取签署链接
    String getSignFlowLink(Long taskId,String actorType,String redirectUrl);
    String getTaskSignStatus(Long taskId,String type);
    //修改签署区
    String updateSignRegion(HrmESignRegionParam param);
    ComponentBathParam getContractTimeAndStatus(ComponentBathParam param);


    //获取填写界面链接
    JSONObject getFillInLink(FillInLinkVo fillInLinkVo);
    //批量创建签署任务
    ComponentBathResult createSignFlowBath(SignFlowParamVo signFlowParamVo);
    ComponentBathResult getFillInData(Long taskId);

    //获取合同编号
    String getContractCode(Long tempId,Long empId);

    //撤回
    boolean revokeTask(Long taskId,String revokeReason);
    //删除
    boolean removeTask(Long taskId);
    //催办
    boolean urgeTask(Long taskId);
    //任务详情
    JSONObject getTaskDetail(Long taskId);
    //发起任务时获取模板名称列表
    List<JSONObject> getTempNameList(String tempName);
    //发起任务时获取模板信息
    JSONObject getTempDetailToTask(Long tempId);
    //延期



    //获取app任务列表
    PageResult<HrmETaskListResult> getTaskAppPage(HrmEContractTaskParam param);

    String getFillInViewToPDFApp(ComponentResult param);

}
